'\" t
.\"     Title: shadow
.\"    Author: Julianne Frances Haugh
.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
.\"      Date: 12/01/2016
.\"    Manual: Библиотечные функции
.\"    Source: shadow-utils 4.4
.\"  Language: Russian
.\"
.TH "shadow" "3" "12/01/2016" "shadow\-utils 4\&.4" "Библиотечные функции"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "НАЗВАНИЕ"
shadow, getspnam \- процедуры для работы с файлом шифрованных паролей
.SH "СИНТАКСИС"
.PP
\fI#include <shadow\&.h>\fR
.PP
\fIstruct spwd *getspent();\fR
.PP
\fIstruct spwd *getspnam(char\fR
\fI*name\fR\fI);\fR
.PP
\fIvoid setspent();\fR
.PP
\fIvoid endspent();\fR
.PP
\fIstruct spwd *fgetspent(FILE\fR
\fI*fp\fR\fI);\fR
.PP
\fIstruct spwd *sgetspent(char\fR
\fI*cp\fR\fI);\fR
.PP
\fIint putspent(struct spwd\fR
\fI*p,\fR
\fIФАЙЛ\fR
\fI*fp\fR\fI);\fR
.PP
\fIint lckpwdf();\fR
.PP
\fIint ulckpwdf();\fR
.SH "ОПИСАНИЕ"
.PP
\fIshadow\fR
управляет содержимым файла теневых паролей,
/etc/shadow\&. Структура в файле
\fI#include\fR:
.sp
.if n \{\
.RS 4
.\}
.nf
struct spwd {
      char	 	 	*sp_namp;  /* имя пользователя */
      char	 	 	*sp_pwdp;  /* шифрованный пароль */
      long int	 	 	sp_lstchg; /* дата последней смены пароля */
      long int	 	 	sp_min;    /* дней должно пройти между сменами пароля\&. */
      long int	 	 	sp_max;    /* дней перед необходимостью смены пароля */
      long int	 	 	sp_warn;   /* дней вывода предупреждения об устаревании */
      long int	 	 	sp_inact;  /* дней перед тем как учётная запись заблокируется */
      long int	 	 	sp_expire; /* дата устаревания учётной записи */
      unsigned long int	sp_flag;   /* зарезервировано */
}
.fi
.if n \{\
.RE
.\}
.PP
Значение каждого поля:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
sp_namp \- указатель на строку с именем пользователя, завершающуюся нулевым символом
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
sp_pwdp \- указатель на строку с паролем, завершающуюся нулевым символом
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
sp_lstchg \- количество дней, когда был изменён пароль последний раз, начиная с 1 января 1970 года
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
sp_min \- количество дней, когда можно не менять пароль
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
sp_max \- количество дней, которое должно пройти, чтобы нужно было поменять пароль
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
sp_warn \- количество дней, когда будет выдаваться предупреждение о скором устаревании пароля перед тем как пароль устареет
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
sp_inact \- количество дней, которые должны пройти после устаревания пароля, когда начинать считать, что учётная запись неактивна и заблокирована
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
sp_expire \- дней, после которых учётная запись будет заблокирована, начиная с 1 января 1970 года
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
sp_flag \- зарезервировано
.RE
.SH "ОПИСАНИЕ"
.PP
Функции
\fIgetspent\fR,
\fIgetspname\fR,
\fIfgetspent\fR
и
\fIsgetspent\fR
возвращают указатель на структуру
\fIstruct spwd\fR\&.
\fIgetspent\fR
возвращает следующую запись из файла, а
\fIfgetspent\fR
возвращает следующую запись из заданного канала, предполагая, что это файл правильного формата\&.\fIsgetspent\fR
возвращает указатель на
\fIstruct spwd\fR, используя предоставленную строку в качестве входящих данных\&.
\fIgetspnam\fR
ищет начиная с текущей позиции в файле запись по имени
\fIname\fR\&.
.PP
Функции
\fIsetspent\fR
и
\fIendspent\fR
можно использовать для перемещения в начало и конец файла теневых паролей соответственно\&.
.PP
Функции
\fIlckpwdf\fR
и
\fIulckpwdf\fR
используются для получения монопольного доступа к файлу
/etc/shadow\&.
\fIlckpwdf\fR
пытается выполнить блокировку с помощью
\fIpw_lock\fR
в течении 15 секунд\&. Далее выполняется попытка получить вторую блокировку с помощью
\fIspw_lock\fR
в течении времени оставшегося от первоначальных 15 секунд\&. При неудаче в любой из блокировок в течении 15 секунд, функция
\fIlckpwdf\fR
возвращает \-1\&. Если обе блокировки прошли успешно возвращается 0\&.
.SH "ДИАГНОСТИКА"
.PP
Функции возвращают NULL, если все записи кончились или произошла ошибка во время работы\&. Функции, возвращающие
\fIint\fR, возвращают 0 при успешном выполнении и \-1 в случае неудачи\&.
.SH "ПРЕДОСТЕРЕЖЕНИЯ"
.PP
Данные функции могут использоваться только суперпользователем, так как доступ к файлу теневых паролей ограничен\&.
.SH "ФАЙЛЫ"
.PP
/etc/shadow
.RS 4
содержит защищаемую информацию о пользователях
.RE
.SH "СМОТРИТЕ ТАКЖЕ"
.PP
\fBgetpwent\fR(3),
\fBshadow\fR(5)\&.
